package cn.xcyy.itcc.mq.consumer;

import cn.xcyy.itcc.enums.GlodalErrorCode;
import cn.xcyy.itcc.service.ICourseUserLearnService;
import cn.xcyy.itcc.util.AssertUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;

@Slf4j
@RocketMQMessageListener(
        consumerGroup = "ali-pay-course-consumer", // 消费者组名
        topic = "pay-notify-topic", // 生产者topic
        selectorExpression = "pay-notify-tag", // 生产者tag
        messageModel = MessageModel.BROADCASTING // 消费消息的模式，可以是集群和广播，如果想要所有消费者都可以消费，那么可以使用广播
)
@Component
public class AliPayCourseConsumer implements RocketMQListener<MessageExt> {

    @Autowired
    private ICourseUserLearnService courseUserLearnService;

    /*
     * @Description: 给用户新增课程信息
     * @param messageExt: 消息对象
     **/
    @Override
    public void onMessage(MessageExt messageExt) {
//        log.info("支付成功处理用户课程信息开始！");
//        // 1.获取消息参数
//        byte[] body = messageExt.getBody();
//        // 2.判断消息是否为空，如果为空那么抛出异常，MQ消费者抛出异常意味着这个消息会再次发送，不会进行签收
//        AssertUtil.isNotNull(body, GlodalErrorCode.NO);
//        // 3.将消息对象转换为消息参数对象
//        PayOrderExtParamsDto payOrderExtParamsDto = JSONObject.parseObject(new String(body, StandardCharsets.UTF_8), PayOrderExtParamsDto.class);
//        // 4.调用业务层方法进行业务处理
//        courseUserLearnService.addCourseUserLearn(payOrderExtParamsDto);
//        log.info("支付成功处理用户课程信息结束！");
    }


}
